<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <!-- 钥匙和房间 -->
    <script>
      var canVisitAllRooms = function (rooms) {
        // len为房间个数
        const len = rooms.length
        // 新建visited数组，visited[i]表示i号房间能否去到，值为true表示去得到，为false表示去不到
        const visited = new Array(len).fill(false)
        // 从0号房间开始，将visited[0]设为true
        visited[0] = true
        // 设置BFS的队列初始值为rooms[0]，是0号房间的持有的钥匙
        const queue = rooms[0]
        while (queue.length) {
          // 取出队列的第一个房间，为下一个打算去的房间
          let room = queue.shift()
          // 判断这个房间是否已经去过，如果去过的话直接跳过，没去过的话，将里面的钥匙添加到队列里
          if (!visited[room]) {
            visited[room] = true
            queue.push(...rooms[room])
          }
        }
        // 判断是不是所有房间都能进入
        return visited.every(v => v === true)
      }
      console.log(canVisitAllRooms([[1, 3], [3, 0, 1], [2], [0]]))
    </script>
  </body>
</html>
